package com.zzs.common.security.exception;


import com.zzs.common.core.enums.ResponseCode;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

/**
 * 自定义业务异常类，用于封装业务异常信息。
 * 可以在代码中直接抛出，会被全局异常处理类捕获并处理
 * @author zzs
 * @date 2025/03/17
 */
@Getter
@Setter
@NoArgsConstructor
public class ServiceException extends RuntimeException{
    /**
     * 业务异常状态码，对应 {@link ResponseCode} 的 code 值。
     */
    private  ResponseCode responseCode;

    /**
     * 使用 {@link ResponseCode} 创建异常，错误消息取自枚举默认信息。
     * @param responseCode 业务响应码枚举
     */
    public ServiceException(ResponseCode responseCode) {
        super(responseCode.getMessage());
        this.responseCode = responseCode;
    }

    /**
     * 使用 {@link ResponseCode} 创建异常，并允许自定义错误消息。
     * @param responseCode 业务响应码枚举
     * @param message 自定义错误消息
     */
    public ServiceException(ResponseCode responseCode, String message) {
        super(message);
        this.responseCode = responseCode;
    }

    public ServiceException(ResponseCode responseCode, Throwable cause) {
        super(responseCode.getMessage(), cause);
    }
}
